<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">
    <#if enableCache>
        <!-- 开启二级缓存 -->
        <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
    </#if>
    <#if baseResultMap>
        <!-- 通用查询映射结果 -->
        <resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
            <#list table.fields as field>
                <#if field.keyFlag><#--生成主键排在第一位-->
                    <id column="${field.name}" property="${field.propertyName}" />
                </#if>
            </#list>
            <#list table.commonFields as field><#--生成公共字段 -->
                <result column="${field.name}" property="${field.propertyName}" />
            </#list>
            <#list table.fields as field>
                <#if !field.keyFlag><#--生成普通字段 -->
                    <#if !table.name?contains("_n_") && !table.name?contains("_m_")>

                          <result column="${field.name}" property="${field.propertyName}" />

                      </#if>
                    </#if>

            </#list>
            <#list table.fields as field>
                <#if !field.keyFlag><#--生成普通字段 -->
                    <#if !table.name?contains("_n_") && !table.name?contains("_m_")>
                        <#if  field.name?contains("_id")>

                            <association property="${field.propertyName?replace("Id","")}" select="${package.Mapper}.${field.capitalName?replace("Id","")}Mapper.selectById"
                                         column="${field.name}">
                            </association>
                        </#if>
                    </#if>
                </#if>
            </#list>
        <#if table.name?contains("_n_") || table.name?contains("_m_")>
            <collection property="${table.fields[1].propertyName?replace("Id","")}s" column="${table.fields[1].name}"
                        javaType="ArrayList" ofType="${package.Entity}.${table.fields[2].capitalName?replace("Id","")}" select="${package.Mapper}.${table.fields[2].capitalName?replace("Id","")}Mapper.selectById">
            </collection>
        </#if>
        </resultMap>
    </#if>
    <#if baseColumnList>
        <!-- 通用查询结果列 -->
        <sql id="Base_Column_List">
            <#list table.commonFields as field>
                ${field.name},
            </#list>
            ${table.fieldNames}
        </sql>
    </#if>
    <#if !table.name?contains("_n_") && !table.name?contains("_m_")>
        <select id="queryPage" parameterType="${package.Controller}.vo.request.${entity}PageRequest" resultMap="BaseResultMap">
            select  * from ${table.name?replace("_id","")} WHERE 1=1
            <#list table.fields as field>
                <#if field.propertyType=="String">
                    <if test="${field.propertyName}!=null and ${field.propertyName}!=''">
                        and ${field.name} like CONCAT('%',${r'#{'}${field.propertyName}${r'}'},'%')
                    </if>
                    <#else >
                    <if test="${field.propertyName}!=null ">
                       and ${field.name}=${r'#{'}${field.propertyName}${r'}'}
                    </if>
                </#if>
            </#list>
        </select>
    <#else>
        <select id="queryPage" parameterType="${package.Controller}.vo.request.${entity}PageRequest" resultMap="BaseResultMap">
            select  * from ${table.name?replace("_id","")} WHERE 1=1
            <#list table.fields as field>
                <#if field.propertyType=="String">
                    <if test="${field.propertyName}!=null and ${field.propertyName}!=''">
                        and ${field.name} like CONCAT('%',${r'#{'}${field.propertyName}${r'}'},'%')
                    </if>
                <#else >
                    <if test="${field.propertyName}!=null ">
                       and ${field.name}=${r'#{'}${field.propertyName}${r'}'}
                    </if>
                </#if>
            </#list>
        </select>
        <select id="queryList" parameterType="${package.Entity}.${entity}" resultMap="BaseResultMap">
            select  * from ${table.name?replace("_id","")} WHERE 1=1
            <#list table.fields as field>
                <#if field.propertyType=="String">
                    <if test="${field.propertyName}!=null and ${field.propertyName}!=''">
                        and ${field.name} like CONCAT('%',${r'#{'}${field.propertyName}${r'}'},'%')
                    </if>
                <#else >
                    <if test="${field.propertyName}!=null ">
                        and ${field.name}=${r'#{'}${field.propertyName}${r'}'}
                    </if>
                </#if>
            </#list>
        </select>
    </#if>

</mapper>
